/*     */ package com.iris.egrant.orm.hibernate;
/*     */ 
/*     */ import com.iris.egrant.utils.ReflectionUtils;
/*     */ import java.io.Serializable;
/*     */ import java.util.ArrayList;
/*     */ import java.util.LinkedHashSet;
/*     */ import java.util.List;
/*     */ import java.util.Map;
/*     */ import java.util.Set;
/*     */ import org.hibernate.Criteria;
/*     */ import org.hibernate.Hibernate;
/*     */ import org.hibernate.Query;
/*     */ import org.hibernate.Session;
/*     */ import org.hibernate.SessionFactory;
/*     */ import org.hibernate.criterion.CriteriaSpecification;
/*     */ import org.hibernate.criterion.Criterion;
/*     */ import org.hibernate.criterion.Restrictions;
/*     */ import org.hibernate.criterion.SimpleExpression;
/*     */ import org.hibernate.metadata.ClassMetadata;
/*     */ import org.slf4j.Logger;
/*     */ import org.slf4j.LoggerFactory;
/*     */ import org.springframework.beans.factory.annotation.Autowired;
/*     */ import org.springframework.beans.factory.annotation.Qualifier;
/*     */ import org.springframework.util.Assert;
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ public class SimpleHibernateDao<T, PK extends Serializable>
/*     */ {
/*  42 */   protected Logger logger = LoggerFactory.getLogger(getClass());
/*     */ 
/*     */   
/*     */   protected SessionFactory sessionFactory;
/*     */ 
/*     */   
/*     */   protected Class<T> entityClass;
/*     */ 
/*     */   
/*     */   public SimpleHibernateDao() {
/*  52 */     this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass());
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public SimpleHibernateDao(@Qualifier("sessionFactory") SessionFactory sessionFactory, Class<T> entityClass) {
/*  64 */     this.sessionFactory = sessionFactory;
/*  65 */     this.entityClass = entityClass;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public SessionFactory getSessionFactory() {
/*  74 */     return this.sessionFactory;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   @Autowired
/*     */   public void setSessionFactory(@Qualifier("sessionFactory") SessionFactory sessionFactory) {
/*  84 */     this.sessionFactory = sessionFactory;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Session getSession() {
/*  93 */     return (Session)this.sessionFactory.getCurrentSession();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void save(T entity) {
/* 103 */     Assert.notNull(entity, "entity不能为空");
/* 104 */     getSession().saveOrUpdate(entity);
/* 105 */     this.logger.debug("save or update entity: {}", entity);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void create(T entity) {
/* 114 */     Assert.notNull(entity, "entity不能为空");
/* 115 */     getSession().save(entity);
/* 116 */     this.logger.debug("create entity: {}", entity);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void delete(T entity) {
/* 126 */     Assert.notNull(entity, "entity不能为空");
/* 127 */     getSession().delete(entity);
/* 128 */     this.logger.debug("delete entity: {}", entity);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void delete(PK id) {
/* 135 */     Assert.notNull(id, "id不能为空");
/* 136 */     delete(get(id));
/* 137 */     this.logger.debug("delete entity {},id is {}", this.entityClass.getSimpleName(), id);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public T get(PK id) {
/* 144 */     Assert.notNull(id, "id不能为空");
/* 145 */     return (T)getSession().get(this.entityClass, (Serializable)id);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public List<T> getAll() {
/* 152 */     return find(new Criterion[0]);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public List<T> findBy(String propertyName, Object value) {
/* 159 */     Assert.hasText(propertyName, "propertyName不能为空");
/* 160 */     SimpleExpression simpleExpression = Restrictions.eq(propertyName, value);
/* 161 */     return find(new Criterion[] { (Criterion)simpleExpression });
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public T findUniqueBy(String propertyName, Object value) {
/* 168 */     Assert.hasText(propertyName, "propertyName不能为空");
/* 169 */     SimpleExpression simpleExpression = Restrictions.eq(propertyName, value);
/* 170 */     return (T)createCriteria(new Criterion[] { (Criterion)simpleExpression }).uniqueResult();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public List<T> findByIds(List<PK> ids) {
/* 177 */     return find(new Criterion[] { Restrictions.in(getIdName(), ids) });
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <X> List<X> find(String hql, Object... values) {
/* 187 */     return createQuery(hql, values).list();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <X> List<X> find(String hql, Map<String, Object> values) {
/* 197 */     return createQuery(hql, values).list();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <X> X findUnique(String hql, Object... values) {
/* 207 */     return (X)createQuery(hql, values).uniqueResult();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <K> K findUniqueTest(String hql, Object... values) {
/* 217 */     return null;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <X> X findUnique(String hql, Map<String, Object> values) {
/* 227 */     return (X)createQuery(hql, values).uniqueResult();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int batchExecute(String hql, Object... values) {
/* 234 */     return createQuery(hql, values).executeUpdate();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public int batchExecute(String hql, Map<String, Object> values) {
/* 243 */     return createQuery(hql, values).executeUpdate();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Query createQuery(String queryString, Object... values) {
/* 255 */     Assert.hasText(queryString, "queryString不能为空");
/* 256 */     Query query = getSession().createQuery(queryString);
/* 257 */     if (values != null) {
/* 258 */       for (int i = 0; i < values.length; i++) {
/* 259 */         query.setParameter(i, values[i]);
/*     */       }
/*     */     }
/* 262 */     return query;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Query createQuery(String queryString, Map<String, Object> values) {
/* 272 */     Assert.hasText(queryString, "queryString不能为空");
/* 273 */     Query query = getSession().createQuery(queryString);
/* 274 */     if (values != null) {
/* 275 */       query.setProperties(values);
/*     */     }
/* 277 */     return query;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public List<T> find(Criterion... criterions) {
/* 287 */     return createCriteria(criterions).list();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public T findUnique(Criterion... criterions) {
/* 297 */     return (T)createCriteria(criterions).uniqueResult();
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Criteria createCriteria(Criterion... criterions) {
/* 309 */     Criteria criteria = getSession().createCriteria(this.entityClass);
/* 310 */     for (Criterion c : criterions) {
/* 311 */       criteria.add(c);
/*     */     }
/* 313 */     return criteria;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void initEntity(T entity) {
/* 322 */     Hibernate.initialize(entity);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public void initEntity(List<T> entityList) {
/* 329 */     for (T entity : entityList) {
/* 330 */       Hibernate.initialize(entity);
/*     */     }
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Query distinct(Query query) {
/* 338 */     query.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
/* 339 */     return query;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public Criteria distinct(Criteria criteria) {
/* 346 */     criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
/* 347 */     return criteria;
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public <X> List<X> distinct(List<? extends X> list) {
/* 355 */     Set<X> set = new LinkedHashSet<X>(list);
/* 356 */     return new ArrayList<X>(set);
/*     */   }
/*     */ 
/*     */ 
/*     */ 
/*     */   
/*     */   public String getIdName() {
/* 363 */     ClassMetadata meta = getSessionFactory().getClassMetadata(this.entityClass);
/* 364 */     return meta.getIdentifierPropertyName();
/*     */   }
/*     */   
/*     */   public void flush() {
/* 368 */     getSession().flush();
/*     */   }
/*     */ }


/* Location:              D:\文件kjt\WEB-INF\lib\egrant-core-2.2.20240205.1659.jar!\com\iris\egrant\orm\hibernate\SimpleHibernateDao.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       1.1.3
 */